/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sv.gob.mh.dgii.model.validators;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import sv.gob.mh.dgii.common.Utils;
import sv.gob.mh.dgii.model.RcRepresentante;
import sv.gob.mh.dgii.model.RcSocio;
import sv.gob.mh.dgii.model.custom.constraints.SeccionFValid;
import sv.gob.mh.dgii.model.custom.constraints.SeccionIValid;
import sv.gob.mh.dgii.model.pojos.ruc.I;

/**
 *
 * @author hgonzalez
 */
public class SeccionIValidator implements ConstraintValidator<SeccionIValid, I> {

    private static String NIT_EQUALS = "El contribuyente no puede ser su mismo socio";
    private static String SOCIO_EXISTE = "Socio ya existe";
    
    public void initialize(SeccionIValid i) {
    }
    
    public boolean isValid(I i, ConstraintValidatorContext cvc) {       
        
        cvc.disableDefaultConstraintViolation();
        
        //Valido hasta que todos los campos esten llenos
        //pues solo asi podre comprobar que no existe agregados previamente
        ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
        Validator validator = factory.getValidator();
        boolean nit_valid = validator.validate(i.getNitsocio()).isEmpty();
        
        if(nit_valid){
            if(i.getNitsocio().equals(i.getNit())){
                cvc.buildConstraintViolationWithTemplate(NIT_EQUALS).addConstraintViolation();
                return false;
            }            
            
            
            for (RcSocio socio : i.getSociosActuales()) {
                if(socio.getId().getNitsocio().equals(i.getNitsocio())){
                    cvc.buildConstraintViolationWithTemplate(SOCIO_EXISTE).addConstraintViolation();
                return false;
                }
            }            
        }
        
        return true;
    }
  
    
}
